#ifndef _I2C_H
#define _I2C_H

#include "at32f435_437.h"
#include "i2c_application.h"

//本测试程序使用的是软件模拟IIC接口驱动
//IIC的数据引脚定义和时钟引脚定义都可以任意修改
//修改引脚定义后，需要对应修改oled.c中OLED_Init_GPIO函数里面引脚初始化

//定义IIC从设备地址：OLED上设置的访问地址为0x78

#define I2Cx_ADDRESS                     0x78

#define I2Cx_PORT                        I2C2
#define I2Cx_CLK                         CRM_I2C2_PERIPH_CLOCK
#define I2Cx_DMA                         DMA1///???
#define I2Cx_DMA_CLK                     CRM_DMA1_PERIPH_CLOCK///???

#define I2Cx_SCL_GPIO_CLK                CRM_GPIOA_PERIPH_CLOCK
#define I2Cx_SCL_GPIO_PIN                GPIO_PINS_0
#define I2Cx_SCL_GPIO_PinsSource         GPIO_PINS_SOURCE0
#define I2Cx_SCL_GPIO_PORT               GPIOA
#define I2Cx_SCL_GPIO_MUX                GPIO_MUX_4


#define I2Cx_SDA_GPIO_CLK                CRM_GPIOA_PERIPH_CLOCK
#define I2Cx_SDA_GPIO_PIN                GPIO_PINS_1
#define I2Cx_SDA_GPIO_PinsSource         GPIO_PINS_SOURCE1
#define I2Cx_SDA_GPIO_PORT               GPIOA
#define I2Cx_SDA_GPIO_MUX                GPIO_MUX_4

#define I2Cx_CLKCTRL                   0x30F01C32   //200K






#define IIC_SLAVE_ADDR 0x78

//--------------IIC端口操作定义---------------------

#define IO_SCL_PIN    GPIO_PINS_2
#define IO_SCL_GPIO_PORT    GPIOC
#define IO_SDA_PIN    GPIO_PINS_3
#define IO_SDA_GPIO_PORT    GPIOC

#define	OLED_SDA_SET()  	gpio_bits_write(IO_SCL_GPIO_PORT, IO_SDA_PIN, TRUE)
#define	OLED_SDA_CLR()  	gpio_bits_write(IO_SCL_GPIO_PORT, IO_SDA_PIN, FALSE)
  
#define	OLED_SCL_SET()  	gpio_bits_write(IO_SCL_GPIO_PORT, IO_SCL_PIN, TRUE)
#define	OLED_SCL_CLR()  	gpio_bits_write(IO_SCL_GPIO_PORT, IO_SCL_PIN, FALSE)



//IIC操作函数
void II2C_Gpio_Init(void);
void IIC_Start(void);
void IIC_Stop(void);
void IIC_Wait_Ack(void);
void Write_IIC_Byte(uint8_t IIC_Byte);
void Write_IIC_Command(uint8_t IIC_Command);
void Write_IIC_Data(uint8_t IIC_Data);


#endif

